// arguments 的主要用途是保存函数参数
// 但这个对象还有一个名叫 callee 的属性，该属性是一个指针，指向拥有这个 arguments 对象的函数。
function factorial (num) {
  'use strict';
  if (num <= 1) {
    return 1;
  }
  return num * arguments.callee(num - 1);
}

// 3628800
console.log(factorial(10));

function inner () {
  'use strict';
  console.log(arguments.callee.caller);
}

// arguments.callee.caller这个属性中保存着调用当前函数的函数的引用，如果是在全局作用域中调用当前函数，它的值为 null
function outer () {
  'use strict';
  inner();
}

outer();
